function throwError (value) {
    // 抛出异常
    throw new Error(value)
}
// 1. onRejected 不会被调用
function badMain (onRejected) {
    // onFulfilled 中发生异常,在同一个 then 方法中指定的 onRejected 不能捕获该异常
    return Promise.resolve(40).then(throwError, onRejected)
    // return Promise.resolve(40).then(throwError, onRejected).catch(onRejected)
}
// 2. 有异常发生时onRejected会被调用
function goodMain (onRejected) {
    // then 中发生的异常,只有在该方法链后面出现的 catch 方法才能捕获
    return Promise.resolve(42).then(throwError).catch(onRejected)
    // .catch 是 .then 的别名,我们使用 .then 也能完成同样的工作
    // return Promise.resolve(42).then(throwError).then(null, onRejected)
}

badMain(function (err) {
    console.log('bad', err);
})
goodMain(function(err) {
    console.log('good', err);
})